package com.room.search.service.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.room.search.domain.*;
import com.room.search.domain.enumeration.BkRoomTypeEnum;
import com.room.search.domain.enumeration.RoomRentMethodEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * A DTO for the {@link com.room.search.domain.RoomGoods} entity.
 */
@ApiModel(description = "房屋详情")
public class RoomGoodsDTO implements Serializable {

    private Long id;

    /**
     * 房屋所属类型
     */
    @ApiModelProperty(value = "房屋所属类型")
    private BkRoomTypeEnum bkRoomType;

    /**
     * 贝壳编号
     */
    @Size(max = 32)
    @ApiModelProperty(value = "贝壳编号")
    private String bkNo;

    /**
     * title
     */
    @Size(max = 1024)
    @ApiModelProperty(value = "title")
    private String title;

    /**
     * 定价
     */
    @Size(max = 32)
    @ApiModelProperty(value = "定价")
    private String oldprice;



    /**
     * 被关注情况
     */
    @Size(max = 8)
    @ApiModelProperty(value = "被关注情况")
    private String focusNo;

    /**
     * 房源特色
     */
    @Size(max = 128)
    @ApiModelProperty(value = "房源特色")
    private String characteristic;

    /**
     * 核心卖点
     */
    @Size(max = 128)
    @ApiModelProperty(value = "核心卖点")
    private String roomSellPoint;

    /**
     * 小区介绍
     */
    @Size(max = 128)
    @ApiModelProperty(value = "小区介绍")
    private String communityIntroduction;

    /**
     * 户型介绍
     */
    @Size(max = 128)
    @ApiModelProperty(value = "户型介绍")
    private String roomIntroduction;

    /**
     * 周边配套
     */
    @Size(max = 128)
    @ApiModelProperty(value = "周边配套")
    private String surroundingFacilities;

    /**
     * 交通出行
     */
    @Size(max = 128)
    @ApiModelProperty(value = "交通出行")
    private String transportation;

    /**
     * 所属经纪人
     */
    @ApiModelProperty(value = "所属经纪人")
    private Long roomBroker;

    /**
     * 是否已经被售出
     */
    @ApiModelProperty(value = "是否已经被售出")
    private Boolean selling;

    /**
     * 每平米价格
     */
    private String areaPrice;

    /**
     * 创建时间
     */
    private Date createdDate;

    /**
     * 上架时间
     */
    private Date upDate;

    /**
     * 看房时间
     */
    private Date contactDate;

    /**
     * 租房方式
     */
    private RoomRentMethodEnum rentMethod;

    /**
     * 经度
     */
    @JsonProperty("lng")
    private String longitude;
    /**
     * 纬度
     */
    @JsonProperty("lat")
    private String latitude;

    /**
     * 具体位置
     */
    private String address;

    /**
     * 省份
     */
    private String province;
    /**
     * 市区
     */
    private String city;
    /**
     * 区县
     */
    private String district;

    /**
     * 户型图Fast_dfs的路径
     */
    private String floorPlan;

    private RoomBasicProperty roomBasic;

    private RoomSupportingFacilities supporting;

    private RoomTransactionProperty roomTransaction;

    private RoomCommunity community;

    private RoomRentBasic rentBasic;

    private List<RoomListingFeature> roomFeatureIds;

    private List<RoomFile> files;

    private List<RoomUser> roomUsers;

    public List<RoomUser> getRoomUsers() {
        return roomUsers;
    }

    public RoomGoodsDTO setRoomUsers(List<RoomUser> roomUsers) {
        this.roomUsers = roomUsers;
        return this;
    }

    public String getLongitude() {
        return longitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public String getLatitude() {
        return latitude;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDistrict() {
        return district;
    }

    public void setDistrict(String district) {
        this.district = district;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public BkRoomTypeEnum getBkRoomType() {
        return bkRoomType;
    }

    public void setBkRoomType(BkRoomTypeEnum bkRoomType) {
        this.bkRoomType = bkRoomType;
    }

    public String getBkNo() {
        return bkNo;
    }

    public void setBkNo(String bkNo) {
        this.bkNo = bkNo;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getOldprice() {
        return oldprice;
    }

    public void setOldprice(String oldprice) {
        this.oldprice = oldprice;
    }



    public String getFocusNo() {
        return focusNo;
    }

    public void setFocusNo(String focusNo) {
        this.focusNo = focusNo;
    }

    public String getCharacteristic() {
        return characteristic;
    }

    public void setCharacteristic(String characteristic) {
        this.characteristic = characteristic;
    }

    public String getRoomSellPoint() {
        return roomSellPoint;
    }

    public void setRoomSellPoint(String roomSellPoint) {
        this.roomSellPoint = roomSellPoint;
    }

    public String getCommunityIntroduction() {
        return communityIntroduction;
    }

    public void setCommunityIntroduction(String communityIntroduction) {
        this.communityIntroduction = communityIntroduction;
    }

    public String getRoomIntroduction() {
        return roomIntroduction;
    }

    public void setRoomIntroduction(String roomIntroduction) {
        this.roomIntroduction = roomIntroduction;
    }

    public String getSurroundingFacilities() {
        return surroundingFacilities;
    }

    public void setSurroundingFacilities(String surroundingFacilities) {
        this.surroundingFacilities = surroundingFacilities;
    }

    public String getTransportation() {
        return transportation;
    }

    public void setTransportation(String transportation) {
        this.transportation = transportation;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Date getUpDate() {
        return upDate;
    }

    public void setUpDate(Date upDate) {
        this.upDate = upDate;
    }

    public Date getContactDate() {
        return contactDate;
    }

    public void setContactDate(Date contactDate) {
        this.contactDate = contactDate;
    }

    public RoomRentMethodEnum getRentMethod() {
        return rentMethod;
    }

    public void setRentMethod(RoomRentMethodEnum rentMethod) {
        this.rentMethod = rentMethod;
    }

    public String getFloorPlan() {
        return floorPlan;
    }

    public void setFloorPlan(String floorPlan) {
        this.floorPlan = floorPlan;
    }

    public Long getRoomBroker() {
        return roomBroker;
    }

    public void setRoomBroker(Long roomBroker) {
        this.roomBroker = roomBroker;
    }

    public Boolean getSelling() {
        return selling;
    }

    public void setSelling(Boolean selling) {
        this.selling = selling;
    }

    public List<RoomFile> getFiles() {
        return files;
    }

    public void setFiles(List<RoomFile> files) {
        this.files = files;
    }

    public RoomBasicProperty getRoomBasic() {
        return roomBasic;
    }

    public void setRoomBasic(RoomBasicProperty roomBasic) {
        this.roomBasic = roomBasic;
    }

    public RoomSupportingFacilities getSupporting() {
        return supporting;
    }

    public void setSupporting(RoomSupportingFacilities supporting) {
        this.supporting = supporting;
    }

    public RoomTransactionProperty getRoomTransaction() {
        return roomTransaction;
    }

    public void setRoomTransaction(RoomTransactionProperty roomTransaction) {
        this.roomTransaction = roomTransaction;
    }

    public RoomCommunity getCommunity() {
        return community;
    }

    public void setCommunity(RoomCommunity community) {
        this.community = community;
    }

    public RoomRentBasic getRentBasic() {
        return rentBasic;
    }

    public RoomGoodsDTO setRentBasic(RoomRentBasic rentBasic) {
        this.rentBasic = rentBasic;
        return this;
    }

    public List<RoomListingFeature> getRoomFeatureIds() {
        return roomFeatureIds;
    }

    public void setRoomFeatureIds(List<RoomListingFeature> roomFeatureIds) {
        this.roomFeatureIds = roomFeatureIds;
    }

    public String getAreaPrice() {
        return areaPrice;
    }

    public void setAreaPrice(String areaPrice) {
        this.areaPrice = areaPrice;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof RoomGoodsDTO)) {
            return false;
        }

        RoomGoodsDTO roomGoodsDTO = (RoomGoodsDTO) o;
        if (this.id == null) {
            return false;
        }
        return Objects.equals(this.id, roomGoodsDTO.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(this.id);
    }

    // prettier-ignore


    @Override
    public String toString() {
        return "RoomGoodsDTO{" +
            "id=" + id +
            ", bkRoomType=" + bkRoomType +
            ", bkNo='" + bkNo + '\'' +
            ", title='" + title + '\'' +
            ", oldprice='" + oldprice + '\'' +
            ", focusNo='" + focusNo + '\'' +
            ", characteristic='" + characteristic + '\'' +
            ", roomSellPoint='" + roomSellPoint + '\'' +
            ", communityIntroduction='" + communityIntroduction + '\'' +
            ", roomIntroduction='" + roomIntroduction + '\'' +
            ", surroundingFacilities='" + surroundingFacilities + '\'' +
            ", transportation='" + transportation + '\'' +
            ", roomBroker=" + roomBroker +
            ", selling=" + selling +
            ", areaPrice='" + areaPrice + '\'' +
            ", createdDate=" + createdDate +
            ", upDate=" + upDate +
            ", contactDate=" + contactDate +
            ", rentMethod=" + rentMethod +
            ", floorPlan='" + floorPlan + '\'' +
            '}';
    }
}
